Risk 06-05-2020 calculations¶
!pip install mlfinlab
!pip install yfinance
# See https://plotly.com/python/static-image-export/
!wget https://github.com/plotly/orca/releases/download/v1.2.1/orca-1.2.1-x86_64.AppImage -O /usr/local/bin/orca
!chmod +x /usr/local/bin/orca
!apt-get install xvfb libgtk2.0-0 libgconf-2-4
Requirement already satisfied: mlfinlab in /usr/local/lib/python3.6/dist-packages (0.11.0)
Requirement already satisfied: scikit-learn>=0.21.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.22.2.post1)
Requirement already satisfied: scipy>=1.3.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.4.1)
Requirement already satisfied: matplotlib>=3.1.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (3.2.1)
Requirement already satisfied: cvxpy>=1.0.25 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.0.31)
Requirement already satisfied: numba>=0.46.0 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.48.0)
Requirement already satisfied: pandas==0.25.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.25.3)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.18.4)
Requirement already satisfied: xmlrunner==1.7.7 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (1.7.7)
Requirement already satisfied: statsmodels>=0.11.1 in /usr/local/lib/python3.6/dist-packages (from mlfinlab) (0.11.1)
Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn>=0.21.3->mlfinlab) (0.15.1)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (2.8.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (1.2.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (2.4.7)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=3.1.1->mlfinlab) (0.10.0)
Requirement already satisfied: scs>=1.1.3 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (2.1.2)
Requirement already satisfied: osqp>=0.4.1 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (0.6.1)
Requirement already satisfied: ecos>=2 in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (2.0.7.post1)
Requirement already satisfied: multiprocess in /usr/local/lib/python3.6/dist-packages (from cvxpy>=1.0.25->mlfinlab) (0.70.9)
Requirement already satisfied: llvmlite<0.32.0,>=0.31.0dev0 in /usr/local/lib/python3.6/dist-packages (from numba>=0.46.0->mlfinlab) (0.31.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from numba>=0.46.0->mlfinlab) (47.1.1)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.6/dist-packages (from pandas==0.25.3->mlfinlab) (2018.9)
Requirement already satisfied: patsy>=0.5 in /usr/local/lib/python3.6/dist-packages (from statsmodels>=0.11.1->mlfinlab) (0.5.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.1->matplotlib>=3.1.1->mlfinlab) (1.12.0)
Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from osqp>=0.4.1->cvxpy>=1.0.25->mlfinlab) (0.16.0)
Requirement already satisfied: dill>=0.3.1 in /usr/local/lib/python3.6/dist-packages (from multiprocess->cvxpy>=1.0.25->mlfinlab) (0.3.1.1)
Requirement already satisfied: yfinance in /usr/local/lib/python3.6/dist-packages (0.1.54)
Requirement already satisfied: pandas>=0.24 in /usr/local/lib/python3.6/dist-packages (from yfinance) (0.25.3)
Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.6/dist-packages (from yfinance) (0.0.9)
Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.6/dist-packages (from yfinance) (1.18.4)
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.6/dist-packages (from yfinance) (2.23.0)
Requirement already satisfied: python-dateutil>=2.6.1 in /usr/local/lib/python3.6/dist-packages (from pandas>=0.24->yfinance) (2.8.1)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.6/dist-packages (from pandas>=0.24->yfinance) (2018.9)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (2.9)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20->yfinance) (2020.4.5.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.6.1->pandas>=0.24->yfinance) (1.12.0)
--2020-06-06 01:09:24-- https://github.com/plotly/orca/releases/download/v1.2.1/orca-1.2.1-x86_64.AppImage
Resolving github.com (github.com)... 140.82.112.4
Connecting to github.com (github.com)|140.82.112.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/99037241/9dc3a580-286a-11e9-8a21-4312b7c8a512?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200606%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200606T010924Z&X-Amz-Expires=300&X-Amz-Signature=971b72c8f2abe513baf90cfb1ab6ec052a1ee774b15cdf9ca435ca13312da24e&X-Amz-SignedHeaders=host&actor_id=0&repo_id=99037241&response-content-disposition=attachment%3B%20filename%3Dorca-1.2.1-x86_64.AppImage&response-content-type=application%2Foctet-stream [following]
--2020-06-06 01:09:24-- https://github-production-release-asset-2e65be.s3.amazonaws.com/99037241/9dc3a580-286a-11e9-8a21-4312b7c8a512?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200606%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200606T010924Z&X-Amz-Expires=300&X-Amz-Signature=971b72c8f2abe513baf90cfb1ab6ec052a1ee774b15cdf9ca435ca13312da24e&X-Amz-SignedHeaders=host&actor_id=0&repo_id=99037241&response-content-disposition=attachment%3B%20filename%3Dorca-1.2.1-x86_64.AppImage&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.163.3
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.163.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51607939 (49M) [application/octet-stream]
Saving to: ‘/usr/local/bin/orca’
/usr/local/bin/orca 100%[===================>] 49.22M 81.8MB/s in 0.6s
2020-06-06 01:09:25 (81.8 MB/s) - ‘/usr/local/bin/orca’ saved [51607939/51607939]
Reading package lists... Done
Building dependency tree
Reading state information... Done
libgtk2.0-0 is already the newest version (2.24.32-1ubuntu1).
libgconf-2-4 is already the newest version (3.2.6-4ubuntu1).
xvfb is already the newest version (2:1.19.6-1ubuntu4.4).
0 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
import yfinance as yf
import pandas as pd
from mlfinlab.portfolio_optimization import RiskMetrics
# DSCI NOT VIABLE THROUGH THIS PERIOD 2019-06-01
def enable_plotly_in_cell():
import IPython
from plotly.offline import init_notebook_mode
display(IPython.core.display.HTML('''<script src="/static/components/requirejs/require.js"></script>'''))
init_notebook_mode(connected=False)
def generate_up(stocks, start_date="2020-03-01", end_date="2020-05-30"):
stocks_string = " ".join(stocks)
data = yf.download(stocks_string, start=start_date, end=end_date,
group_by="ticker")
data = data.fillna(method='ffill')
# Drop columns with no entries
data = data.dropna(axis='columns', how='all')
full_df = pd.concat([data[ticker]["Close"] for ticker in stocks], axis=1)
return full_df
enable_plotly_in_cell()
assets_returns = generate_up(["NEXCF", "ACB.TO", "BB.TO", "N.V", "APHA.TO", "TTT.CN", "HUT.TO", "HIVE.V", "AC.TO", "CVE.TO"])
# Calculate empirical covariance of assets
assets_cov = assets_returns.cov()
# Set weights for assets in a portfolio
weights = [0.5, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05,0.1]
# Pick a confidence interval
alpha = 0.05
# Class that contains needed functions
risk_met = RiskMetrics()
# Calculate Variance
Var = risk_met.calculate_variance(assets_cov, weights)
# Calculate Value at Risk of the first asset
VaR = risk_met.calculate_value_at_risk(assets_returns.iloc[:,0], alpha)
# Calculate Expected Shortfall
CVaR = risk_met.calculate_expected_shortfall(assets_returns.iloc[:,0], alpha)
# Calculate Conditional Drawdown at Risk
CDaR = risk_met.calculate_conditional_drawdown_risk(assets_returns.iloc[:,0], alpha)
print(Var)
print(VaR)
print(CVaR)
print(CDaR)
[*********************100%***********************] 10 of 10 completed
0.4361749107909163
0.7200000286102295
0.6476999968290329
0.613099992275238